home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / Snippets / Testing & Debugging / Gestalt dcmd / Gestalt_dcmd.p < prev    next >
Encoding:
Text File  |  1992-07-15  |  24.9 KB  |  709 lines  |  [TEXT/MPS ]

  1. unit Gestalt_dcmd;
  2.  
  3. (*    The following MPW commands will build the dcmd and copy it to the
  4.     "Debugger Prefs" file in the System folder. The dcmd's name in
  5.     MacsBug will be the name of the file built by the Linker.
  6.  
  7. set dc "{perso}Gestalt dcmd:"; export dc
  8. directory "{dc}"
  9. Pascal Gestalt_dcmd.p
  10. Link "{libraries}"dcmdGlue.a.o Gestalt_dcmd.p.o "{libraries}"interface.o "{libraries}"runtime.o "{plibraries}"paslib.o -o Gestalt
  11. BuildDcmd Gestalt 127
  12. directory "{mpw}"
  13.  
  14. *)
  15.  
  16. interface
  17.  
  18. uses MemTypes, OsUtils, dcmd;
  19.  
  20. {$R-}
  21. {$OV-}
  22.  
  23. { Public declaration for dcmdGlue. Must be in every dcmd. The name cannot be changed. }
  24.  
  25. procedure CommandEntry(paramPtr: dcmdBlockPtr);
  26.  
  27. implementation
  28.  
  29. const
  30.     kWholeSelectors1 = 'versaddralisatlka/uxctbvdbacedtnevntfold';
  31.     kWholeSelectors2 = 'fontfpu hdwrhelpkbd lmemlrammiscmmu nmgr';
  32.     kWholeSelectors3 = 'os  pgszppc powrprocprtyqd  ram rsrcscri';
  33.     kWholeSelectors4 = 'scr#snd te  tmgrvm  machrom romvsysvconn';
  34.     kWholeSelectors5 = 'crm fxfrser termditleasyfs  nluppop!stdf';
  35.     kWholeSelectors6 = 'micnostttbttxttt';
  36.  
  37. procedure DoDcmdHelp;
  38.     begin
  39.         dcmdDrawLine('Gestalt [selector]');
  40.         dcmdDrawLine('   Display Gestalt values, no selector means all values.');
  41.         dcmdDrawLine('   Version 1.0 by Eric SIMENEL, Apple Computer France.');
  42.         dcmdDrawLine('   Some selectors are recognized and have a special processing.');
  43.         dcmdDrawLine('   Other selectors are sent thru to Gestalt, and you get the response if any.');
  44.     end;
  45.  
  46. function MyGestalt(selector: OSType; VAR response: Longint): OsErr;
  47.     inline $202F, $0004, $A1AD, $226F, $0000, $2288, $3F40, $0008, $508F;
  48.  
  49. {
  50. 202F 0004      ' /..'            MOVE.L     $0004(A7),D0
  51. A1AD           '..'              DC.W       $A1AD               ; OS 00AD is Gestalt trap
  52. 226F 0000      '"o..'            MOVEA.L    $0000(A7),A1
  53. 2288           '".'              MOVE.L     A0,(A1)
  54. 3F40 0008      '?@..'            MOVE.W     D0,$0008(A7)
  55. 508F           'P.'              ADDQ.L     #$8,A7
  56. }
  57.  
  58. procedure NumberToHex(number: Longint; var hex: Str255);
  59. var
  60.     digits: Str255;
  61.     n: Integer;
  62.  
  63.     begin
  64.         digits := '0123456789ABCDEF';
  65.         hex := '00000000';
  66.         for n := 8 downto 1 do
  67.             begin
  68.                 hex[n] := digits[1 + (number mod 16)];
  69.                 number := number div 16;
  70.             end;
  71.     end;
  72.  
  73. procedure NumberToShortHex(number: Longint; var hex: Str255);
  74. var
  75.     digits: Str255;
  76.     n: Integer;
  77.  
  78.     begin
  79.         digits := '0123456789ABCDEF';
  80.         hex := '0000';
  81.         for n := 4 downto 1 do
  82.             begin
  83.                 hex[n] := digits[1 + (number mod 16)];
  84.                 number := number div 16;
  85.             end;
  86.     end;
  87.  
  88. procedure NumberToShortHex2(number: Longint; var hex: Str255; leadingzero: Boolean);
  89. var
  90.     digits: Str255;
  91.     n: Integer;
  92.  
  93.     begin
  94.         digits := '0123456789ABCDEF';
  95.         hex    := '00';
  96.         for n := 2 downto 1 do
  97.             begin
  98.                 hex[n] := digits[1 + (number mod 16)];
  99.                 number := number div 16;
  100.             end;
  101.         if not leadingzero then
  102.             if hex[1] = '0' then
  103.                 begin
  104.                     hex[1] := hex[2];
  105.                     hex[0] := Chr(1);
  106.                 end;
  107.     end;
  108.  
  109. procedure NumberToString(number: Longint; var astr: Str255);
  110. var
  111.     digits: Str255;
  112.     n, m: Integer;
  113.     minus: Boolean;
  114.     
  115.     begin
  116.         minus := (number < 0);
  117.         if minus then number := -number;
  118.         digits := '0123456789';
  119.         astr   := '          ';
  120.         for n := 10 downto 1 do
  121.             begin
  122.                 astr[n] := digits[1 + (number mod 10)];
  123.                 number := number div 10;
  124.             end;
  125.         n := 1;
  126.         while (astr[n] = '0') and (n < 10) do n := n+1;
  127.         if minus then digits[0] := Chr(12-n) else digits[0] := Chr(11-n);
  128.         if minus then m := 1 else m := 0;
  129.         while n <= 10 do
  130.             begin
  131.                 m := m+1;
  132.                 digits[m] := astr[n];
  133.                 n := n+1;
  134.             end;
  135.         if minus then digits[1] := '-';
  136.         astr := digits;
  137.     end;
  138.  
  139. procedure CommandEntry(paramPtr: dcmdBlockPtr);
  140. var
  141.     ch: Char;
  142.     str: Str255;
  143.  
  144.     procedure AskASelector(theSelector: Str255);
  145.     var
  146.         i, j, k: Integer;
  147.         aSelector, aKnownSelector: OSType;
  148.         response: Longint;
  149.         theErr: OsErr;
  150.  
  151.         procedure DispVersion;
  152.             begin
  153.                 dcmdDrawString(', v.');
  154.                 NumberToShortHex2(response div 256, str, false);
  155.                 dcmdDrawString(str);
  156.                 dcmdDrawString('.');
  157.                 NumberToShortHex2(response mod 256, str, true);
  158.                 dcmdDrawString(str);
  159.             end;
  160.  
  161.         begin
  162.             dcmdDrawLine(theSelector);
  163.             for i := 1 to 4 do aSelector[i] := theSelector[i];
  164.             i := -1;
  165.             for j := 1 to 10 do
  166.                 begin
  167.                     for k := 1 to 4 do aKnownSelector[k] := kWholeSelectors1[4*(j-1)+k];
  168.                     if aKnownSelector = aSelector then i := j;
  169.                 end;
  170.             if i = -1 then
  171.                 for j := 1 to 10 do
  172.                     begin
  173.                         for k := 1 to 4 do aKnownSelector[k] := kWholeSelectors2[4*(j-1)+k];
  174.                         if aKnownSelector = aSelector then i := j+10;
  175.                     end;
  176.             if i = -1 then
  177.                 for j := 1 to 10 do
  178.                     begin
  179.                         for k := 1 to 4 do aKnownSelector[k] := kWholeSelectors3[4*(j-1)+k];
  180.                         if aKnownSelector = aSelector then i := j+20;
  181.                     end;
  182.             if i = -1 then
  183.                 for j := 1 to 10 do
  184.                     begin
  185.                         for k := 1 to 4 do aKnownSelector[k] := kWholeSelectors4[4*(j-1)+k];
  186.                         if aKnownSelector = aSelector then i := j+30;
  187.                     end;
  188.             if i = -1 then
  189.                 for j := 1 to 10 do
  190.                     begin
  191.                         for k := 1 to 4 do aKnownSelector[k] := kWholeSelectors5[4*(j-1)+k];
  192.                         if aKnownSelector = aSelector then i := j+40;
  193.                     end;
  194.             if i = -1 then
  195.                 for j := 1 to 4 do
  196.                     begin
  197.                         for k := 1 to 4 do aKnownSelector[k] := kWholeSelectors6[4*(j-1)+k];
  198.                         if aKnownSelector = aSelector then i := j+50;
  199.                     end;
  200.  
  201.             case i of
  202.                  1: dcmdDrawString(', Gestalt version         ');
  203.                  2: dcmdDrawString(', Addressing mode attrib. ');
  204.                  3: dcmdDrawString(', Alias Mgr attributes    ');
  205.                  4: dcmdDrawString(', AppleTalk version       ');
  206.                  5: dcmdDrawString(', A/UX version if present ');
  207.                  6: dcmdDrawString(', Comm Toolbox version    ');
  208.                  7: dcmdDrawString(', DB Access Mgr version   ');
  209.                  8: dcmdDrawString(', Edition Mgr attributes  ');
  210.                  9: dcmdDrawString(', AppleEvents attributes  ');
  211.                 10: dcmdDrawString(', Folder Mgr attributes   ');
  212.                 11: dcmdDrawString(', Font Mgr attributes     ');
  213.                 12: dcmdDrawString(', FPU type                ');
  214.                 13: dcmdDrawString(', Hardware attributes     ');
  215.                 14: dcmdDrawString(', Help Mgr attributes     ');
  216.                 15: dcmdDrawString(', Keyboard type           ');
  217.                 16: dcmdDrawString(', Low-memory area size    ');
  218.                 17: dcmdDrawString(', Logical RAM size        ');
  219.                 18: dcmdDrawString(', Miscellaneous attrib.   ');
  220.                 19: dcmdDrawString(', MMU Type                ');
  221.                 20: dcmdDrawString(', Notification Mgr attrib.');
  222.                 21: dcmdDrawString(', O/S attributes          ');
  223.                 22: dcmdDrawString(', Logical page size       ');
  224.                 23: dcmdDrawString(', PPC Toolbox attributes  ');
  225.                 24: dcmdDrawString(', Power Mgr attributes    ');
  226.                 25: dcmdDrawString(', Processor type          ');
  227.                 26: dcmdDrawString(', Parity attributes       ');
  228.                 27: dcmdDrawString(', QuickDraw version       ');
  229.                 28: dcmdDrawString(', Physical RAM size       ');
  230.                 29: dcmdDrawString(', Resource Mgr attributes ');
  231.                 30: dcmdDrawString(', Script Mgr version      ');
  232.                 31: dcmdDrawString(', # of active script syst.');
  233.                 32: dcmdDrawString(', Sound attributes        ');
  234.                 33: dcmdDrawString(', TextEdit version        ');
  235.                 34: dcmdDrawString(', Time Mgr version        ');
  236.                 35: dcmdDrawString(', Virtual memory attrib.  ');
  237.                 36: dcmdDrawString(', Machine type            ');
  238.                 37: dcmdDrawString(', ROM size                ');
  239.                 38: dcmdDrawString(', ROM version             ');
  240.                 39: dcmdDrawString(', System file version     ');
  241.                 40: dcmdDrawString(', Connection Mgr attrib.  ');
  242.                 41: dcmdDrawString(', Comm resource Mgr attrib');
  243.                 42: dcmdDrawString(', File transfer Mgr arrrib');
  244.                 43: dcmdDrawString(', Serial attributes       ');
  245.                 44: dcmdDrawString(', Terminal Mgr attributes ');
  246.                 45: dcmdDrawString(', DITL Extensions attrib. ');
  247.                 46: dcmdDrawString(', Easy Access attributes  ');
  248.                 47: dcmdDrawString(', File system attributes  ');
  249.                 48: dcmdDrawString(', Standard NBP attributes ');
  250.                 49: dcmdDrawString(', Popup CDEF attributes   ');
  251.                 50: dcmdDrawString(', Standard File attributes');
  252.                 51: dcmdDrawString(', Machine Icon            ');
  253.                 52: dcmdDrawString(', OS trap table base      ');
  254.                 53: dcmdDrawString(', Toolbox trap table base ');
  255.                 54: dcmdDrawString(', Ext. TB trap table base ');
  256.             end;
  257.             theErr := MyGestalt(aSelector, response);
  258.             if theErr <> noErr then
  259.                 begin
  260.                     NumberToString(theErr, str);
  261.                     dcmdDrawString(', error= ');
  262.                     dcmdDrawString(str);
  263.                     case theErr of
  264.                         -5550: dcmdDrawString(', No response');
  265.                         -5551: dcmdDrawString(', Undefined selector');
  266.                     end;
  267.                 end
  268.             else
  269.                 begin
  270.                     NumberToString(response, str);
  271.                     dcmdDrawString(', response= ');
  272.                     dcmdDrawString(str);
  273.                     case i of
  274.                         1:;
  275.                         2: begin
  276.                                     NumberToHex(response, str);
  277.                                     dcmdDrawString(', ');
  278.                                     dcmdDrawString(str);
  279.                                     if response mod 2 = 1 then
  280.                                         dcmdDrawLine('               booted in 32-bit mode');
  281.                                     response := response div 2;
  282.                                     if response mod 2 = 1 then
  283.                                         dcmdDrawLine('               32-bit compatible system zone');
  284.                                     response := response div 2;
  285.                                     if response mod 2 = 1 then
  286.                                         dcmdDrawLine('               machine is 32-bit capable');
  287.                             end;
  288.                         3: case response of
  289.                                 1: dcmdDrawString(', Alias Mgr is present');
  290.                             end;
  291.                         4:;
  292.                         5:;
  293.                         6: DispVersion;
  294.                         7: case response of
  295.                                 1: dcmdDrawString(', DB Access Mgr is present');
  296.                             end;
  297.                         8: case response of
  298.                                 1: dcmdDrawString(', Edition Mgr is present');
  299.                             end;
  300.                         9: case response of
  301.                                 1: dcmdDrawString(', AppleEvents present');
  302.                             end;
  303.                         10: case response of
  304.                                 1: dcmdDrawString(', Folder Mgr is present');
  305.                             end;
  306.                         11: case response of
  307.                                 1: dcmdDrawString(', Outline fonts present');
  308.                             end;
  309.                         12: case response of
  310.                                 0: dcmdDrawString(', no FPU present');
  311.                                 1: dcmdDrawString(', Motorola 68881 present');
  312.                                 2: dcmdDrawString(', Motorola 68882 present');
  313.                                 3: dcmdDrawString(', Motorola 68040 built-in FPU');
  314.                             end;
  315.                         13: begin
  316.                                     NumberToHex(response, str);
  317.                                     dcmdDrawString(', ');
  318.                                     dcmdDrawString(str);
  319.                                     if response mod 2 = 1 then
  320.                                         dcmdDrawLine('               VIA1 present');
  321.                                     response := response div 2;
  322.                                     if response mod 2 = 1 then
  323.                                         dcmdDrawLine('               VIA2 present');
  324.                                     response := response div 2;
  325.                                     if response mod 2 = 1 then
  326.                                         dcmdDrawLine('               RBV present');
  327.                                     response := response div 2;
  328.                                     if response mod 2 = 1 then
  329.                                         dcmdDrawLine('               ASC present');
  330.                                     response := response div 2;
  331.                                     if response mod 2 = 1 then
  332.                                         dcmdDrawLine('               SCC present');
  333.                                     response := response div 2;
  334.                                     if response mod 2 = 1 then
  335.                                         dcmdDrawLine('               OSS present');
  336.                                     response := response div 2;
  337.                                     if response mod 2 = 1 then
  338.                                         dcmdDrawLine('               SCSI DMA present');
  339.                                     response := response div 2;
  340.                                     if response mod 2 = 1 then
  341.                                         dcmdDrawLine('               SCSI present');
  342.                                     response := response div 2;
  343.                                     if response mod 2 = 1 then
  344.                                         dcmdDrawLine('               SWIM IOP present');
  345.                                     response := response div 2;
  346.                                     if response mod 2 = 1 then
  347.                                         dcmdDrawLine('               SCC IOP present');
  348.                                     response := response div 2;
  349.                                     if response mod 2 = 1 then
  350.                                         dcmdDrawLine('               Fitch memory Controller');
  351.                                     response := response div 2;
  352.                                     if response mod 2 = 1 then
  353.                                         dcmdDrawLine('               IWM/SWIM');
  354.                                     response := response div 2;
  355.                                     if response mod 2 = 1 then
  356.                                         dcmdDrawLine('               PWM disk speed buffer');
  357.                                     response := response div 2;
  358.                                     if response mod 2 = 1 then
  359.                                         dcmdDrawLine('               RAM-based sound buffer');
  360.                                     response := response div 2;
  361.                                     if response mod 2 = 1 then
  362.                                         dcmdDrawLine('               Video D/A Converter');
  363.                                     response := response div 2;
  364.                                     if response mod 2 = 1 then
  365.                                         dcmdDrawLine('               PGC (parity control)');
  366.                             end;
  367.                         14: case response of
  368.                                 1: dcmdDrawString(', Help Mgr present');
  369.                             end;
  370.                         15: case response of
  371.                                 1: dcmdDrawString(', Mac keyboard');
  372.                                 2: dcmdDrawString(', Mac keyboard and keypad');
  373.                                 3: dcmdDrawString(', Mac Plus keyboard');
  374.                                 4: dcmdDrawString(', Extended ADB keyboard');
  375.                                 5: dcmdDrawString(', Standard ADB keyboard');
  376.                                 6: dcmdDrawString(', Portable Std ADB keyboard');
  377.                                 7: dcmdDrawString(', Portable ISO ADB keyboard');
  378.                                 8: dcmdDrawString(', ISO Std ADB keyboard');
  379.                                 9: dcmdDrawString(', ISO Ext ADB keyboard');
  380.                                 10: dcmdDrawString(', Elmer keyboard');
  381.                                 11: dcmdDrawString(', Elmer ISO keyboard');
  382.                             end;
  383.                         16:;
  384.                         17:;
  385.                         18: begin
  386.                                     NumberToHex(response, str);
  387.                                     dcmdDrawString(', ');
  388.                                     dcmdDrawString(str);
  389.                                     if response mod 2 = 1 then
  390.                                         dcmdDrawLine('               Scrolling Throttle');
  391.                                     response := response div 2;
  392.                                     if response mod 2 = 1 then
  393.                                         dcmdDrawLine('               Boot Globals');
  394.                                     response := response div 2;
  395.                                     if response mod 2 = 1 then
  396.                                         dcmdDrawLine('               Square Menu Bar');
  397.                             end;
  398.                         19: case response of
  399.                                 0: dcmdDrawString(', No MMU present');
  400.                                 1: dcmdDrawString(', Mac II addr management unit');
  401.                                 2: dcmdDrawString(', Motorola 68851 PMMU');
  402.                                 3: dcmdDrawString(', Motorola 68030 built-in MMU');
  403.                                 4: dcmdDrawString(', Motorola 68040 built-in MMU');
  404.                             end;
  405.                         20: case response of
  406.                                 1: dcmdDrawString(', Notification Mgr present');
  407.                             end;
  408.                         21: begin
  409.                                     NumberToHex(response, str);
  410.                                     dcmdDrawString(', ');
  411.                                     dcmdDrawString(str);
  412.                                     if response mod 2 = 1 then
  413.                                         dcmdDrawLine('               System heap can grow');
  414.                                     response := response div 2;
  415.                                     if response mod 2 = 1 then
  416.                                         dcmdDrawLine('               Can return from launch');
  417.                                     response := response div 2;
  418.                                     if response mod 2 = 1 then
  419.                                         dcmdDrawLine('               Can launch from full filespec');
  420.                                     response := response div 2;
  421.                                     if response mod 2 = 1 then
  422.                                         dcmdDrawLine('               Launch control support');
  423.                                     response := response div 2;
  424.                                     if response mod 2 = 1 then
  425.                                         dcmdDrawLine('               Temp memory support present');
  426.                                     response := response div 2;
  427.                                     if response mod 2 = 1 then
  428.                                         dcmdDrawLine('               Temp memory handles are real');
  429.                                     response := response div 2;
  430.                                     if response mod 2 = 1 then
  431.                                         dcmdDrawLine('               Temp memory handles tracked');
  432.                                     response := response div 2;
  433.                                     if response mod 2 = 1 then
  434.                                         dcmdDrawLine('               IPC support is present');
  435.                                     response := response div 2;
  436.                                     if response mod 2 = 1 then
  437.                                         dcmdDrawLine('               System debugger support');
  438.                             end;
  439.                         22:;
  440.                         23: begin
  441.                                     NumberToHex(response, str);
  442.                                     dcmdDrawString(', ');
  443.                                     dcmdDrawString(str);
  444.                                     if response = 0 then
  445.                                         dcmdDrawLine('               PPC Toolbox present')
  446.                                     else
  447.                                         begin
  448.                                             if response mod 2 = 1 then
  449.                                         dcmdDrawLine('               PPC supports Incoming');
  450.                                             response := response div 2;
  451.                                             if response mod 2 = 1 then
  452.                                         dcmdDrawLine('               PPC supports Out Going');
  453.                                             response := response div $0800;
  454.                                             if response mod 2 = 1 then
  455.                                         dcmdDrawLine('               PPC supports real-time delivery');
  456.                                             response := response div 2;
  457.                                             if response mod 2 = 1 then
  458.                                         dcmdDrawLine('               PPC store and forward delivery');
  459.                                             response := response div 2;
  460.                                             if response mod 2 = 1 then
  461.                                         dcmdDrawLine('               PPC supports Specification of Don''t care');
  462.                                         end;
  463.                             end;
  464.                         24: begin
  465.                                     NumberToHex(response, str);
  466.                                     dcmdDrawString(', ');
  467.                                     dcmdDrawString(str);
  468.                                     if response mod 2 = 1 then
  469.                                         dcmdDrawLine('               Power Mgr is present');
  470.                                     response := response div 2;
  471.                                     if response mod 2 = 1 then
  472.                                         dcmdDrawLine('               CPU can idle');
  473.                                     response := response div $0800;
  474.                                     if response mod 2 = 1 then
  475.                                         dcmdDrawLine('               Can stop SCC clock');
  476.                                     response := response div 2;
  477.                                     if response mod 2 = 1 then
  478.                                         dcmdDrawLine('               Can turn off sound power');
  479.                             end;
  480.                         25: case response of
  481.                                 1: dcmdDrawString(', Motorola 68000');
  482.                                 2: dcmdDrawString(', Motorola 68010');
  483.                                 3: dcmdDrawString(', Motorola 68020');
  484.                                 4: dcmdDrawString(', Motorola 68030');
  485.                                 5: dcmdDrawString(', Motorola 68040');
  486.                             end;
  487.                         26: begin
  488.                                     NumberToHex(response, str);
  489.                                     dcmdDrawString(', ');
  490.                                     dcmdDrawString(str);
  491.                                     if response mod 2 = 1 then
  492.                                         dcmdDrawLine('               Machine can check parity');
  493.                                     response := response div 2;
  494.                                     if response mod 2 = 1 then
  495.                                         dcmdDrawLine('               Parity RAM is installed');
  496.                             end;
  497.                         27: begin
  498.                                 case (response div 256) of
  499.                                     0: dcmdDrawString(', Original QuickDraw');
  500.                                     1: dcmdDrawString(', 8-bit Color QuickDraw');
  501.                                     2: dcmdDrawString(', 32-bit Color QuickDraw');
  502.                                 end;
  503.                                 DispVersion;
  504.                             end;
  505.                         28:;
  506.                         29: case response of
  507.                                 1: dcmdDrawString(', Partial resources functions exist');
  508.                             end;
  509.                         30: DispVersion;
  510.                         31:;
  511.                         32: begin
  512.                                     NumberToHex(response, str);
  513.                                     dcmdDrawString(', ');
  514.                                     dcmdDrawString(str);
  515.                                     if response mod 2 = 1 then
  516.                                         dcmdDrawLine('               Stereo capability present');
  517.                                     response := response div 2;
  518.                                     if response mod 2 = 1 then
  519.                                         dcmdDrawLine('               Stereo mixing on external speaker');
  520.                                     response := response div 2;
  521.                                     if response mod 2 = 1 then
  522.                                         dcmdDrawLine('               Sound Reserved');
  523.                                     response := response div 2;
  524.                                     if response mod 2 = 1 then
  525.                                         dcmdDrawLine('               Sound I/O Manager present');
  526.                                     response := response div 2;
  527.                                     if response mod 2 = 1 then
  528.                                         dcmdDrawLine('               Sound Input hardware present');
  529.                             end;
  530.                         33: case response of
  531.                                 1: dcmdDrawString(', In MacIIci ROM');
  532.                                 2: dcmdDrawString(', 6.0.4 scripts on MacIIci');
  533.                                 3: dcmdDrawString(', 6.0.4 scripts on all Macs but MacIIci');
  534.                                 4: dcmdDrawString(', In 6.0.5 and 7.0');
  535.                             end;
  536.                         34: case response of
  537.                                 1: dcmdDrawString(', Standard Time Mgr');
  538.                                 2: dcmdDrawString(', Revised Time Mgr');
  539.                                 3: dcmdDrawString(', Extended Time Mgr');
  540.                             end;
  541.                         35: case response of
  542.                                 1: dcmdDrawString(', Virtual memory present');
  543.                             end;
  544.                         36: case response of
  545.                                 1: dcmdDrawString(', Macintosh 128K');
  546.                                 2: dcmdDrawString(', Macintosh XL');
  547.                                 3: dcmdDrawString(', Macintosh 512K Enhanced');
  548.                                 4: dcmdDrawString(', Macintosh Plus');
  549.                                 5: dcmdDrawString(', Macintosh SE');
  550.                                 6: dcmdDrawString(', Macintosh II');
  551.                                 7: dcmdDrawString(', Macintosh IIx');
  552.                                 8: dcmdDrawString(', Macintosh IIcx');
  553.                                 9: dcmdDrawString(', Macintosh SE/30');
  554.                                 10: dcmdDrawString(', Macintosh Portable');
  555.                                 11: dcmdDrawString(', Macintosh IIci');
  556.                                 13: dcmdDrawString(', Macintosh IIfx');
  557.                                 17: dcmdDrawString(', Macintosh Classic');
  558.                                 18: dcmdDrawString(', Macintosh IIsi');
  559.                                 19: dcmdDrawString(', Macintosh LC');
  560.                             end;
  561.                         37:;
  562.                         38: begin
  563.                                 DispVersion;
  564.                                 dcmdDrawString(', ROM wasn''t built in one day…');
  565.                             end;
  566.                         39: DispVersion;
  567.                         40: begin
  568.                                     NumberToHex(response, str);
  569.                                     dcmdDrawString(', ');
  570.                                     dcmdDrawString(str);
  571.                                     if response mod 2 = 1 then
  572.                                         dcmdDrawLine('               Connection Mgr present');
  573.                                     response := response div 2;
  574.                                     if response mod 2 = 1 then
  575.                                         dcmdDrawLine('               Connection Mgr Error String');
  576.                                     response := response div 2;
  577.                                     if response mod 2 = 1 then
  578.                                         dcmdDrawLine('               Extended I/O model present');
  579.                                     response := response div 2;
  580.                                     if response mod 2 = 1 then
  581.                                         dcmdDrawLine('               Fix to CMAddSearch present');
  582.                             end;
  583.                         41: case response of
  584.                                 1: dcmdDrawString(', Comm resource Mgr present');
  585.                             end;
  586.                         42: begin
  587.                                     NumberToHex(response, str);
  588.                                     dcmdDrawString(', ');
  589.                                     dcmdDrawString(str);
  590.                                     if response mod 2 = 1 then
  591.                                         dcmdDrawLine('               File transfer Mgr present');
  592.                                     response := response div 2;
  593.                                     if response mod 2 = 1 then
  594.                                         dcmdDrawLine('               File transfer Mgr Error String');
  595.                             end;
  596.                         43: begin
  597.                                     NumberToHex(response, str);
  598.                                     dcmdDrawString(', ');
  599.                                     dcmdDrawString(str);
  600.                                     if response mod 2 = 1 then
  601.                                         dcmdDrawLine('               GPIa connected to DCDa');
  602.                                     response := response div 2;
  603.                                     if response mod 2 = 1 then
  604.                                         dcmdDrawLine('               GPIa connected to RTxCa clock input');
  605.                                     response := response div 2;
  606.                                     if response mod 2 = 1 then
  607.                                         dcmdDrawLine('               GPIb connected to DCDb');
  608.                             end;
  609.                         44: begin
  610.                                     NumberToHex(response, str);
  611.                                     dcmdDrawString(', ');
  612.                                     dcmdDrawString(str);
  613.                                     if response mod 2 = 1 then
  614.                                         dcmdDrawLine('               Terminal Mgr present');
  615.                                     response := response div 2;
  616.                                     if response mod 2 = 1 then
  617.                                         dcmdDrawLine('               Terminal Error String');
  618.                             end;
  619.                         45: case response of
  620.                                 1: dcmdDrawString(', DITL Extensions present');
  621.                             end;
  622.                         46: begin
  623.                                     NumberToHex(response, str);
  624.                                     dcmdDrawString(', ');
  625.                                     dcmdDrawString(str);
  626.                                     if response mod 2 = 1 then
  627.                                         dcmdDrawLine('               Easy Access present, but off');
  628.                                     response := response div 2;
  629.                                     if response mod 2 = 1 then
  630.                                         dcmdDrawLine('               Easy Access "On"');
  631.                                     response := response div 2;
  632.                                     if response mod 2 = 1 then
  633.                                         dcmdDrawLine('               Easy Access "Sticky"');
  634.                                     response := response div 2;
  635.                                     if response mod 2 = 1 then
  636.                                         dcmdDrawLine('               Easy Access "Locked"');
  637.                             end;
  638.                         47: case response of
  639.                                 0: dcmdDrawString(', New HFS Dispatcher');
  640.                             end;
  641.                         48: case response of
  642.                                 1: dcmdDrawString(', Standard NBP present');
  643.                             end;
  644.                         49: case response of
  645.                                 1: dcmdDrawString(', Popup CDEF present');
  646.                             end;
  647.                         50: case response of
  648.                                 1: dcmdDrawString(', Standard File 5-8 present');
  649.                             end;
  650.                         otherwise
  651.                             begin
  652.                                 NumberToHex(response, str);
  653.                                 dcmdDrawString(', response in hexa= ');
  654.                                 dcmdDrawString(str);
  655.                             end;
  656.                     end;
  657.                 end;
  658.         end;
  659.  
  660.     begin
  661.         case paramPtr^.request of
  662.             dcmdInit:;
  663.             dcmdDoIt:
  664.                 begin
  665.                     if NGetTrapAddress($A1AD, OSTrap) = NGetTrapAddress($A89F, ToolTrap) then
  666.                         begin
  667.                             dcmdDrawLine('Gestalt is not implemented on this machine with this system !');
  668.                             exit(CommandEntry);
  669.                         end;
  670.                     dcmdDrawLine(' ');
  671.                     if dcmdPeekAtNextChar = Chr($0D) then
  672.                         begin
  673.                             AskASelector('vers'); AskASelector('addr'); AskASelector('alis');
  674.                             AskASelector('atlk'); AskASelector('a/ux'); AskASelector('ctbv');
  675.                             AskASelector('dbac'); AskASelector('edtn'); AskASelector('evnt');
  676.                             AskASelector('fold'); AskASelector('font'); AskASelector('fpu ');
  677.                             AskASelector('hdwr'); AskASelector('help'); AskASelector('kbd ');
  678.                             AskASelector('lmem'); AskASelector('lram'); AskASelector('misc');
  679.                             AskASelector('mmu '); AskASelector('nmgr'); AskASelector('os  ');
  680.                             AskASelector('pgsz'); AskASelector('ppc '); AskASelector('powr');
  681.                             AskASelector('proc'); AskASelector('prty'); AskASelector('qd  ');
  682.                             AskASelector('ram '); AskASelector('rsrc'); AskASelector('scri');
  683.                             AskASelector('scr#'); AskASelector('snd '); AskASelector('te  ');
  684.                             AskASelector('tmgr'); AskASelector('vm  '); AskASelector('mach');
  685.                             AskASelector('rom '); AskASelector('romv'); AskASelector('sysv');
  686.                             AskASelector('conn'); AskASelector('crm '); AskASelector('fxfr');
  687.                             AskASelector('ser '); AskASelector('term'); AskASelector('ditl');
  688.                             AskASelector('easy'); AskASelector('fs  '); AskASelector('nlup');
  689.                             AskASelector('pop!'); AskASelector('stdf'); AskASelector('micn');
  690.                             AskASelector('ostt'); AskASelector('tbtt'); AskASelector('xttt');
  691.                         end
  692.                     else
  693.                         begin
  694.                             ch := dcmdGetNextParameter(str);
  695.                             if (ch <> Chr($0D)) or (Length(str) <> 4) then
  696.                                 begin
  697.                                     dcmdDrawLine('Syntax is :');
  698.                                     dcmdDrawLine('Gestalt [selector]');
  699.                                     dcmdDrawLine('   where selector is a gestalt selector such as mach or sysv.');
  700.                                 end
  701.                             else AskASelector(str);
  702.                         end;
  703.                 end;
  704.             dcmdHelp: DoDcmdHelp;
  705.         end;
  706.     end;
  707.  
  708. end.
  709.